/*
 * @lc app=leetcode.cn id=59 lang=cpp
 *
 * [59] 螺旋矩阵 II
 */

// @lc code=start

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> ans(n, vector<int>(n, 0));

        int r = 0, c = 0;
        int i = 1;
        do
        {
            if(!(r >= 0 && r < n && c >= 0 && c < n))break;

            for(; c < n && !ans[r][c]; c++)
            {
                ans[r][c] = i++;
            }
            c--;
            if(!(r >= 0 && r < n && c >= 0 && c < n))break;

            for(r++; r < n && !ans[r][c]; r++)
            {
                ans[r][c] = i++;
            }
            r--;
            if(!(r >= 0 && r < n && c >= 0 && c < n))break;

            for(c--; c >= 0 && !ans[r][c]; c--)
            {
                ans[r][c] = i++;
            }
            c++;
            if(!(r >= 0 && r < n && c >= 0 && c < n))break;

            for(r--; r >= 0 && !ans[r][c]; r--)
            {
                ans[r][c] = i++;
            }
            r++;
            c++;
            if(!(r >= 0 && r < n && c >= 0 && c < n))break;


        } while (i <= n*n);
        

        return ans;
    }
};
// @lc code=end

